526
class Solution {
    int count = 0;
    boolean[] flag;
    public int countArrangement(int n) {
        flag = new boolean[n+1];
        fun(n, 1);
        return count;
    }

    public void fun(int n, int i) {
        if (n  i) {
            count++;
            return;
        }
        for (int j = 1; j  n+1; j++) {
            if (!flag[j]) {
                if (!check(j, i)) {
                    continue;
                }
                flag[j] = true;
                fun(n, i+1);
                flag[j] = false;
            }
        }
    }

    public boolean check(int n, int i) {
        if (n % i == 0  i % n == 0) {
            return true;
        }
        return false;
    }
}
链接：https://ac.nowcoder.com/acm/challenge/terminal
来源：牛客网

题目描述 
兔子发现了一个数字序列，于是开始研究这个序列。兔子觉得一个序列应该需要有一个命名，命名应该要与这个序列有关。由于兔子十分讨厌完全平方数，所以兔子开创了一个新的命名方式：这个序列中最大的不是完全平方数的数字就是他的名字。
现在兔子有一个序列，想要知道这个序列的名字是什么。
输入描述:
第一行一个整数 n，表示序列的长度。 
第二行有 n 个整数 ai，表示序列中的 n 个数分别是多少。
输出描述:
输出仅一行，表示这个序列的名字，也就是这个序列中最大的非完全平方数


import java.util.Scanner;

public class Main{
    public static void main(String args[]){
        Scanner in = new Scanner(System.in);
        int n = in.nextInt();
        int max = 0;
        while(n-- > 0){
            int a = in.nextInt();
            int b = (int)Math.sqrt(a);
            if (b * b != a && a > max){
                max = a;
            }
        }
        System.out.println(max);
    }
}